<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
			/* 
			变量的提升
				-使用var声明的变量，它会在所有代码执行前被声明,只是声明，没有赋值。
				-所以我们可以在变量声明前就访问变量
				
			函数的提升
				-使用函数声明创建的函数，会在其他代码执行前被创建;
				 所以我们可以在函数声明前调用函数；
				 
		    let声明的变量实际也会提升，但是在赋值之前解释器禁止访问该变量
			 */

			//console.log("a=", a); //let定义的a在后面，会报错；
			//let a = 10

			//var声明的变量会在执行前声明，但没有赋值。
			console.log("b=", b); //b= undefined
			var b = 10;

			fn(); //可以正常调用。
			//这是函数声明创建的函数
			function fn() {
				console.log("我是函数...");
			}

			//fn2(); //fn2不是函数声明创建的函数，会报错。
			var fn2 = function() {
				console.log("我是函数2...");
			}

			//如果 let声明的变量实际不会提升，会报” c is not defined“
			//而在这打印的是这种错误.
			console.log("c=", c); //报Cannot access 'c' before initialization
			let c = 11;
		</script>
	</head>
	<body>
	</body>
</html>